﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
// Copyright (C) 2021 kingerrobot
// 版权所有。 
//
// 文件名：BWcsEquipLoc
// 文件功能描述：
//
// 创建者：名字 (zzl)
// 时间：2021/12/8 14:10:32
//
// 修改人：
// 时间：
// 修改说明：
// 版本：V1.0.0
//----------------------------------------------------------------*/
#endregion
namespace KingerRobot.MexicoSailunMDC.SpiService;

internal class BWcsEquipLoc : IWcsEquipLoc
{

    public POWcsEquipLoc GetEquipLocByEquipId(long equipId)
    {
        var db = Db.Default;
        var result = db.WcsEquipLocs
            .Where(t => t.EquipId == equipId)
            .FirstOrDefault();
        return result;
    }
    public List<EquipLocLocEquipBean> GetEquipLocIdAndEquipId()
    {
        var db = Db.Default;
        var result = db.WcsEquipLocs
            .Select(t => new EquipLocLocEquipBean
            {
                EquipId = t.EquipId,
                LocId = t.LocId,
            }).ToList();
        return result;
    }
    public List<POWcsEquipLoc> GetEquipIdsByLocIds(List<long> locIds)
    {
        var db = Db.Default;
        var result = db.WcsEquipLocs
            .Where(t => locIds.Contains(t.LocId.GetValueOrDefault()))
            .ToList();
        return result;
    }

    public POWcsEquipLoc GetEquipLocByLocId(long locId)
    {
        var db = Db.Default;
        var result = db.WcsEquipLocs
            .Where(t => t.LocId == locId)
            .FirstOrDefault();
        return result;
    }

    public long GetEquipIdByLocId(long locId) => GetEquipLocByLocId(locId)?.EquipId ?? 0;

    public long GetLocIdByEquipId(long equipId) => GetEquipLocByEquipId(equipId)?.LocId ?? 0;

    public CuringLRDTO GetCuringLRByLocId(long locId)
    {
        var db = Db.Default;
        var curing = db.WcsEquipLocs.Join(db.RcsEquipCurings, f => f.EquipId, s => s.Id, (f, s) => new
        {
            f.LocId,
            Curing = s,
        }).Join(db.RcsEquips, f => f.Curing.Id, s => s.Id, (f, s) => new { f.LocId, Curing = f.Curing, Equip = s })
          .Where(t => t.Equip.EquipEnable == 1 && t.Equip.ErrCode == 0 && t.Equip.EquipType == 7 && t.LocId == locId)
          .Select(t => t.Curing)
          .FirstOrDefault();

        return GetCuringRLReault(curing);


        //return result;
    }


    public CuringLRDTO GetCuringRLReault(PORcsEquipCuring curing)
    {
        // 设备是否停止【停止(已有请料输送至异常口)】
        if (curing is null || curing.CuringStatus == 2)
        {
            return null;
        }

        string mode;
        // 1:(1号右模；2号左模)；2:(1号左模；2号右模)
        if (curing.CuringSign == 1)
        {
            //TODO 左右模 定义为Const常量
            mode = curing.CuringModeIndex == 1 ? ConstFields.CuringModeR : ConstFields.CuringModeL;
        }
        else
        {
            mode = curing.CuringModeIndex == 1 ? ConstFields.CuringModeL : ConstFields.CuringModeR;
        }
        return new()
        {
            CuringId = curing.Id.GetValueOrDefault(),
            CuringCode = curing.CuringCode,
            Mode = mode,
            ModeIndex = curing.CuringModeIndex.GetValueOrDefault(),
        };
    }

}
public class EquipLocLocEquipBean
{
    public long? EquipId { get; set; }
    public long? LocId { get; set; }

}
